package com.system.cacheCenterBackend.controller.hotKeyController;

import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * 热点数据控制器，用于管理热点key的统计
 */
public class HotDataController {
    
    // 存储不同数据类型的key访问计数
    private static final ConcurrentHashMap<String, ConcurrentHashMap<String, AtomicInteger>> dataTypeKeyCountMap = new ConcurrentHashMap<>();
    
    /**
     * 添加key到指定数据类型的热点统计中
     * 
     * @param dataType 数据类型（如：string, hash, list, set, zset）
     * @param key 键名
     */
    public static void addKey(String dataType, String key) {
        dataTypeKeyCountMap.computeIfAbsent(dataType, k -> new ConcurrentHashMap<>())
                .computeIfAbsent(key, k -> new AtomicInteger(0))
                .incrementAndGet();
    }
    
    /**
     * 从指定数据类型的热点统计中移除key
     * 
     * @param dataType 数据类型（如：string, hash, list, set, zset）
     * @param key 键名
     */
    public static void removeKey(String dataType, String key) {
        ConcurrentHashMap<String, AtomicInteger> keyCountMap = dataTypeKeyCountMap.get(dataType);
        if (keyCountMap != null) {
            keyCountMap.remove(key);
            // 如果该数据类型下没有key了，也移除数据类型
            if (keyCountMap.isEmpty()) {
                dataTypeKeyCountMap.remove(dataType);
            }
        }
    }
    
    /**
     * 获取指定数据类型下key的访问次数
     * 
     * @param dataType 数据类型
     * @param key 键名
     * @return 访问次数
     */
    public static int getKeyCount(String dataType, String key) {
        ConcurrentHashMap<String, AtomicInteger> keyCountMap = dataTypeKeyCountMap.get(dataType);
        if (keyCountMap != null) {
            AtomicInteger count = keyCountMap.get(key);
            return count != null ? count.get() : 0;
        }
        return 0;
    }
    
    /**
     * 重置指定数据类型下key的访问统计
     * 
     * @param dataType 数据类型
     * @param key 键名
     */
    public static void resetKeyCount(String dataType, String key) {
        ConcurrentHashMap<String, AtomicInteger> keyCountMap = dataTypeKeyCountMap.get(dataType);
        if (keyCountMap != null) {
            AtomicInteger count = keyCountMap.get(key);
            if (count != null) {
                count.set(0);
            }
        }
    }
    
    /**
     * 获取所有数据类型的热点统计信息
     * 
     * @return 热点统计信息
     */
    public static ConcurrentHashMap<String, ConcurrentHashMap<String, AtomicInteger>> getAllHotData() {
        return new ConcurrentHashMap<>(dataTypeKeyCountMap);
    }
}